#include<bits/stdc++.h>
using namespace std;
int _x[]={0,1,1,-1,-1,2,2,-2,-2},_y[]={0,2,-2,2,-2,1,-1,1,-1},a[6][6],sta[6][6]=
{
	{0,0,0,0,0,0},
	{0,1,1,1,1,1},
	{0,0,1,1,1,1},
	{0,0,0,2,1,1},
	{0,0,0,0,0,1},
	{0,0,0,0,0,0}
};
bool flag;
int check()
{
	int ret=0;
	for(int i=1;i<=5;++i)
		for(int j=1;j<=5;++j)
			if(a[i][j]!=sta[i][j])++ret;
	return ret;
}
void dfs(int dep,int x,int y,int _max)
{
	if(dep==_max)
	{
		if(!check())flag=true;
		return;
	}
	if(flag)return;
	for(int i=1;i<=8;++i)
	{
		int xx=x+_x[i],yy=y+_y[i];
		if(xx<1||xx>5||yy<1||yy>5)continue;
		swap(a[x][y],a[xx][yy]);
		if(check()+dep<=_max)dfs(dep+1,xx,yy,_max);
		swap(a[x][y],a[xx][yy]);
	}
	return;
}
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int x,y;
		flag=false;
		for(int i=1;i<=5;++i)
		{
			char t[10];
			scanf("%s",t+1);
			for(int j=1;j<=5;++j)
			{
				if(t[j]=='0'||t[j]=='1')a[i][j]=t[j]-'0';
				else 
				{
					a[i][j]=2;
					x=i;
					y=j;
				}
			}
		}
		if(!check())
		{
			printf("0\n");
			continue;
		}
		for(int i=1;i<=15;++i)
		{
			dfs(0,x,y,i);
			if(flag)
			{
				printf("%d\n",i);
				break;
			}
		}
		if(!flag)printf("-1\n");
	}
	return 0;
}
